package com.medsys.appservice;

import java.util.List;

import com.medsys.dao.DAOFactory;
import com.medsys.dao.MedicoDAO;
import com.medsys.model.Medico;
import com.medsys.model.Paciente;
/**
 * Classe de servi�os para a classe {@link Medico} 
 * @author Felipe Lauksas
 *
 */
public class MedicoAppService {
/**
 * M�todo para salvar um objeto do tipo {@link Medico} no banco de dados.
 * @param medico do tipo {@link Medico}.
 */
	public void salvar(Medico medico) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		MedicoDAO medicoDAO = daoFactory.getMedicoDAO();

		try {

			daoFactory.iniciarTransacao();

			medicoDAO.salvar(medico);

			daoFactory.encerrarTransacao();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
	}
/**
 *	M�todo para alterar um objeto do tipo {@link Medico} no banco de dados.
 * @param medico do tipo {@link Medico}.
 */
	public void alterar(Medico medico) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		MedicoDAO medicoDAO = daoFactory.getMedicoDAO();

		try {

			daoFactory.iniciarTransacao();

			medicoDAO.alterar(medico);

			daoFactory.encerrarTransacao();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
	}
/**
 * M�todo que retorna uma {@link List} com objetos do tipo {@link Medico}.
 * @return Objeto do tipo {@link List} populado com objetos do tipo {@link Medico} de todo o banco de dados.
 */
	public List<Medico> listarTodos() {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		MedicoDAO medicoDAO = daoFactory.getMedicoDAO();

		List<Medico> listMedicos = null;
		
		try {

			listMedicos = medicoDAO.listarTodos();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return listMedicos;

	}
	/**
	 * M�todo que pesquisa um objeto do tipo {@link Paciente} no banco de dados
	 * @param Objeto {@link Long} referente ao ID do paciente
	 * @return Objeto do tipo {@link Paciente}
	 */
	public Medico pesquisarPorId(Long id) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		MedicoDAO medicoDAO = daoFactory.getMedicoDAO();

		Medico medico = null;
		
		try {

			medico = medicoDAO.pesquisarPorId(id);

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return medico;

	}
	/**
	 * M�todo que pesquisa um objeto do tipo {@link Paciente} no banco de dados
	 * @param Objeto {@link Long} referente ao ID do paciente
	 * @return Objeto do tipo {@link Paciente}
	 */
	public Medico pesquisarPorCrm(String crm) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		MedicoDAO medicoDAO = daoFactory.getMedicoDAO();

		Medico medico = null;
		
		try {

			medico = medicoDAO.pesquisarPorCrm(crm);

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return medico;

	}

}
